﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;


namespace eCampus
{   
    /// <summary>
    /// Formulario Nueva Notocia
    /// </summary>
    public partial class FormNoticiaNueva : Form
    {
        /// <summary>
        /// variables
        /// </summary>
        string usuario,asignatura;
        ENNoticias noticia;
        bool esModificar;

        /// <summary>
        /// Constructor para crear nueva noticia
        /// </summary>
        /// <param name="usu">Usuario</param>
        /// <param name="asig">Asignatura</param>
        public FormNoticiaNueva(string usu, string asig)
        {
            usuario = usu;
            asignatura = asig;
            esModificar = false;
            InitializeComponent();
        }
        
        /// <summary>
        /// Constructor para modificar una noticia
        /// </summary>
        /// <param name="noti"></param>
        public FormNoticiaNueva(ENNoticias noti)
        {
            esModificar = true;
            noticia = noti;
            InitializeComponent();

            tbAsunto.Text = noti.Asunto;
            tbMens.Text = noti.Mensaje;
            btPublicar.Text = "Modificar";
            Text = "Modificar noticia";

            if (noti.Visibilidad == 1)
            {
                rbPública.Checked = true;
            }
            else
            {
                rbPrivada.Checked = true;
            }

            if (noti.Archivo != "")
            {
                tbAdjunto.Visible = true;
                tbAdjunto.Text = GetFicheroFromRuta(noti.Archivo);
                pictureBoxAdjunto.Visible = true;
                label4.Text = "Cambiar archivo";
                pictureBoxCancelarAdjunto.Visible = true;
            }
        }

        /// <summary>
        /// Obtiene el fichero a partir de una ruta dropbox
        /// Ej: /noticias/asd/1234.jpg -> 1234.jpg
        /// </summary>
        /// <param name="ruta"></param>
        /// <returns></returns>
        public static string GetFicheroFromRuta(string ruta)
        {
            string[] aux = ruta.Split('/');

            if (aux.Length > 1) return aux[aux.Length - 1];
            else return "";

        }

        #region Código mejora de la Interfaz de Usuario

        private void tbAsunto_Enter(object sender, EventArgs e)
        {
           tbAsunto.BackColor = Color.LightGoldenrodYellow;
        }

        private void tbAsunto_Leave(object sender, EventArgs e)
        {
            tbAsunto.BackColor = Color.White;
        }

        private void tbMens_Enter(object sender, EventArgs e)
        {
            tbMens.BackColor = Color.LightGoldenrodYellow;
        }

        private void tbMens_Leave(object sender, EventArgs e)
        {
            tbMens.BackColor = Color.White;
        }
        private void rbPrivada_Enter(object sender, EventArgs e)
        {
            rbPrivada.BackColor = Color.LightGoldenrodYellow;
        }

        private void rbPrivada_Leave(object sender, EventArgs e)
        {
            rbPrivada.BackColor = Color.White;
        }

        private void rbPública_Enter(object sender, EventArgs e)
        {
            rbPública.BackColor = Color.LightGoldenrodYellow;
        }

        private void rbPública_Leave(object sender, EventArgs e)
        {
            rbPública.BackColor = Color.White;
        }
        #endregion

        /// <summary>
        /// Publica una noticia
        /// </summary>
        /// <param name="sender">btPublicar</param>
        /// <param name="e">Click</param>
        private void btPublicar_Click(object sender, EventArgs e)
        {
            if (esModificar)
            {
                try
                {
                    noticia.Asunto = tbAsunto.Text;
                    noticia.Mensaje = tbMens.Text;
                    progressBar1.Visible = true;

                    if (rbPública.Checked) 
                        noticia.Visibilidad = 1;
                    else  
                        noticia.Visibilidad = 0;

                    if (tbAdjunto.Text.Contains('\\'))
                    {
                        noticia.Archivo = tbAdjunto.Text;
                    }
                    else if (tbAdjunto.Text == "")
                    {
                        noticia.Archivo = "";
                    }

                    noticia.actualizaNoticia(progressBar1);
                    Dispose();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ha ocurrido un error al modificar\r\n" + ex.Message + "\r\n" + ex.StackTrace, "Error");
                }
            }
            else
            {
                //limpio si hay errores
                errorProviderNuevaNoticia.Clear();

                // Comprobación de noticia insertada

                try
                {
                    int Espublica = 0;     //si es o no pública 
                    string elAdjunto = ""; //guardar adjunto
                    bool todoBien = true; //en ppio todo bien

                    if (rbPública.Checked == true) Espublica = 1;
                    else                           Espublica = 0;

                    //veo si han introducido asunto de la noticia
                    if ((tbAsunto.Text == "") && (todoBien == true))
                    {
                        errorProviderNuevaNoticia.SetError(tbAsunto, "Debe introducir un asunto para su Noticia");
                        todoBien = false;
                        tbAdjunto.Focus();
                    }

                    //veo si han introducido cuerpo de la noticia
                    if ((tbMens.Text == "") && (todoBien == true))
                    {
                        errorProviderNuevaNoticia.SetError(tbMens, "Debe introducir el cuerpo para su Noticia");
                        todoBien = false;
                        tbMens.Focus();
                    }


                    elAdjunto = tbAdjunto.Text;


                    if (todoBien)
                    {
                        ENNoticias not1 = new ENNoticias();
                        not1.nuevaNoticia(usuario, asignatura, tbAsunto.Text, tbMens.Text, tbAdjunto.Text, Espublica,progressBar1);
                        Dispose();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("No se ha podido publicar la noticia:\n" + ex,
                        "Error en la publicación", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }


        /// <summary>
        /// Botón para adjuntar un archivo en la noticia (usamos un label)
        /// </summary>
        /// <param name="sender">objeto</param>
        /// <param name="entidadUsuario">evento</param>
        private void label4_Click(object sender, EventArgs e)
        {
            OpenFileDialog eligeArchivoAAdjuntar = new OpenFileDialog();
            if (eligeArchivoAAdjuntar.ShowDialog() == DialogResult.OK)
            {
                tbAdjunto.Text = eligeArchivoAAdjuntar.FileName;
                tbAdjunto.Visible = true;
                pictureBoxAdjunto.Visible = true;
                label4.Text = "Cambiar archivo";
                pictureBoxCancelarAdjunto.Visible = true;
            }
        }

        /// <summary>
        /// Elimina fichero adjunto
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pictureBoxCancelarAdjunto_Click(object sender, EventArgs e)
        {
            tbAdjunto.Text = "";
            pictureBoxAdjunto.Visible = false;
            label4.Text = "Adjuntar Archivo";
            pictureBoxCancelarAdjunto.Visible = false;
        }

        #region Ayuda al Usuario
        private void rbPrivada_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(rbPrivada, "Podrá ser consultada sólo por usuarios de eCampus");
        }

        private void rbPública_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(rbPública, "Podrá ser consultada por usuarios de eCampus y visitantes de la página web");
        }

        private void tbAsunto_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(tbAsunto, "Añada sobre qué versará la Noticia");
        }

        private void tbMens_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(tbMens, "Añada el contenido de la Noticia");
        }

        private void pictureBoxAdjunto_MouseHover(object sender, EventArgs e)
        {
            ToolTip queHace = new ToolTip();
            queHace.SetToolTip(pictureBoxAdjunto, tbAdjunto.Text);
        }
        #endregion

        /// <summary>
        /// Descarga archivo adjunto
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pictureBoxAdjunto_Click(object sender, EventArgs e)
        {
            SaveFileDialog dialogoDescarga = new SaveFileDialog();
            dialogoDescarga.Title = "Descargar";
            dialogoDescarga.FileName = CADGestionDropbox.GetFicheroFromRuta(noticia.Archivo.Replace('/', '\\'));
            if (dialogoDescarga.ShowDialog() == DialogResult.OK)
            {
                progressBar1.Visible = true;
                if (new ENNoticias().Descargar(noticia.Archivo, dialogoDescarga.FileName.Substring(0, dialogoDescarga.FileName.LastIndexOf("\\")),progressBar1))
                {
                    MessageBox.Show("El fichero se ha descargado correctamente", "Descarga finalizada");
                }
                else
                {
                    MessageBox.Show("La descarga no se realizó correctamente", "Error en la descarga");
                }
                progressBar1.Visible = false;
            }
        }
    }
}
